--[[ 编码: WMS-15-06 名称: 收货单-主从面板-选ASN后 作者:HAN 日期:2025-1-29 级别:固定 (说明本段代码在项目中不太会变化) 函数: AeforeSelectASN 功能: 1)选中一个ASN后,把ASN中还可以收货的物料加入收货单明细 更改记录: --]] json = require ("json") mobox = require ("OILua_JavelinExt") m3 = require("oi_base_mobox") -- 获取采购订单明细,返回插入ROW数据 function GetASNDetail( strLuaDEID, strAsnNo ) local strCondition, nRet, strRetInfo local strOrder = 'N_ROW_NO' strCondition = "F_QTY > F_ACC_R_QTY + F_ACC_C_QTY AND S_ASN_NO = '"..strAsnNo.."'" nRet, strRetInfo = mobox.queryDataObjAttr( strLuaDEID, "ASN_Detail", strCondition, strOrder, "F_QTY", "F_ACC_R_QTY","F_ACC_C_QTY", "S_ITEM_CODE", "S_ITEM_NAME","S_ITEM_SPEC","S_UOM" ) if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "获取【预收货单明细】失败! "..strRetInfo ) end local retObjs = json.decode( strRetInfo ) local nObjs = #retObjs local n, nCol, nMaxCol local attrs local strInsertRow = '' local qty, acc_r_qty, acc_c_qty -- 获取 ASN_Detial 中的属性,设置到 Receipt_Detail nMaxCol = #retObjs[1].attrs for n = 1, nObjs do attrs = retObjs[n].attrs -- 判断一下数量 qty = lua.StrToNumber( attrs[1].value ) acc_r_qty = lua.StrToNumber( attrs[2].value ) acc_c_qty = lua.StrToNumber( attrs[3].value ) --组织插入的 Receipt_Detail 数据 local receipt_detail_attrs = {} local nIndex = 1 for nCol = 4, nMaxCol do receipt_detail_attrs[nIndex] = attrs[nCol] nIndex = nIndex+1 end -- 数量是 最大可收货数量 receipt_detail_attrs[nIndex] = lua.KeyValueObj( "F_QTY", qty-acc_r_qty-acc_c_qty ) strInsertRow = strInsertRow..'{"attrs":'..lua.table2str(receipt_detail_attrs)..'},' end if ( strInsertRow ~= '') then return '['..lua.trim_laster_char(strInsertRow)..']' end return '' end function AeforeSelectASN ( strLuaDEID ) local nRet, strRetInfo local strDataJson -- step1:获取选择面板中选中的数据 nRet, strDataJson = mobox.getCurEditDataPacket( strLuaDEID ) if ( nRet ~=0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "无法获取Lua数据包!") end if ( strDataJson == '' ) then return end -- step2: 解析输入的Json格式文本, 选中的数据对象 local obj, success success, obj = pcall( json.decode, strDataJson) if ( success == false ) then lua.Error( strLuaDEID, debug.getinfo(1), "非法的JSON格式!"..obj ) end -- 因为是单选 格式:{"id":"","attr1":"",...} -- 获取返回的数据对象属性 local strAsnNo = '' -- ASN编码 local strSpplierNo = '' -- 供应商编码 local strSpplierName = '' -- 供应商名称 local strInsertRow = '' strAsnNo = obj.S_NO strSpplierNo = obj.S_SUPPLIER_NO strSpplierName = obj.S_SUPPLIER_NAME if (strAsnNo == '' or strAsnNo == nil ) then return end if (strSpplierNo == nil ) then strSpplierNo = '' end if (strSpplierName == nil ) then strSpplierName = '' end -- 获取ASN中还可以收货的货品清单 strInsertRow = GetASNDetail( strLuaDEID, strAsnNo ) -- 设置主从窗口中 主表中的属性 local setAttr = '[{"attr":"S_ASN_NO","value":"'..strAsnNo..'"},{"attr":"S_SUPPLIER_NO","value":"'..strSpplierNo..'"},' setAttr = setAttr..'{"attr":"S_SUPPLIER_NAME","value":"'..strSpplierName..'"}]' local strAction = '[{"action_type":"set_dlg_attr","value":'..setAttr..'}' if ( strInsertRow ~= '' ) then strAction = strAction..',{"action_type":"clear_rows","value":""},{"action_type":"insert_bottom_row","value":'..strInsertRow..'}' end strAction = strAction..']' nRet, strRetInfo = mobox.setAction( strLuaDEID, strAction ) if ( nRet ~= 0 ) then lua.Error( strLuaDEID, debug.getinfo(1), "setAction失败! "..strRetInfo..' action = '..strAction ) end end